iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
AI & Data

AI的本_資料科學打基礎系列 第 12

[Day 12] Python_list的賦值/切片拷貝...

  • 分享至 

  • xImage
  •  

今天一定要把list這邊結束(雖然我都不太懂

list賦值~
假設我喜歡的運動是籃球與棒球,我們通常會直接設定初始值
mysports = ['basketball','baseball']
要是我朋友也喜歡這兩項運動,
我們會這樣寫
friendsports = mysports

接下來,我想加入football,他想加入soccer
會發生~https://ithelp.ithome.com.tw/upload/images/20190913/20119806kXAUSwAe4G.jpg
奇怪~怎麼兩個結果是一樣的
類似這種只要有一個list更改元素會去影響到另一個list同步更改,這就是賦值的特性
此時透過id()去看位址,發現還是共用同一個
問題出在friendsports = mysports 實際上只是將list位址拷貝另一個list來用

為此~要切片拷貝
friendsports = mysport[:]
https://ithelp.ithome.com.tw/upload/images/20190913/20119806NldIMdOXQ0.jpg
這樣list改變後,不會去影響另一個list的內容

接著再來看copy 以及deepcopy

賦值

假設b=a, a和b位址相同,指向一物件彼此會連動

淺拷貝

假設b=a.copy(), a和b是獨立的物件,但是他們的子物件元素是指向同一物件
就是物件的子物件會連動

深拷貝

假設b=deepcopy(a), a和b以及其子物件都是獨立的物件,未來不會受到連動的干擾
使用deepcopy需要'import copy'模組
https://ithelp.ithome.com.tw/upload/images/20190913/20119806ETJRqGKTOo.jpg

下面介紹in/ not in運算式
主要是用在判斷一個物件是否屬於另一物件
物件可以是string/ list/ Tuble/ Dict

boolean_value = obj1 in obj2 #物件obj1在物件obj2內 會傳回True
boolean_value = obj1 not in obj2 #物件obj1不在物件obj2內 會傳回True
https://ithelp.ithome.com.tw/upload/images/20190913/20119806Lip5d9VEt8.jpg

再來是 is/ is not運算式
可以用於比較兩個物件是否相同
這邊相同不只是內容相同,而是指物件變數指向相同的記憶體

boolean_value = obj1 is obj2 #物件obj1等於物件obj2 會傳回True
boolean_value = obj1 is not obj2 #物件obj1不等於物件obj2 會傳回True
https://ithelp.ithome.com.tw/upload/images/20190913/20119806vho9zCWBfF.jpg

好了 ~祝大家 烤肉節快樂


上一篇
[Day 11] Python 進階的串列操作
下一篇
[Day 13] Python 迴圈之...
系列文
AI的本_資料科學打基礎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言